package org.proxycine.gestsalles.web.beans;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.proxycine.gestsalles.model.entities.Film;
import org.proxycine.gestsalles.services.FilmService;

@ManagedBean(name="listeFilmsBean")
// ViewScoped pour qu'il recharge la liste des films achetés à chaque
// affichage de la page
@ViewScoped

public class ListeFilmsBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private List<Film> filmsAchetes;
	private Film selectedFilm;
	
	
	public ListeFilmsBean() {

		// On récupère tous les films en DB
		filmsAchetes = FilmService.getInstance().getAllFilms();


	}

	public String outcome() {
		// Envoi du film sélectionné au bean "modifierFilmBean"
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ELContext el = facesContext.getELContext();
		Application app = facesContext.getApplication();
		ExpressionFactory ef = app.getExpressionFactory();
		ValueExpression ve = ef.createValueExpression(el, "#{modifierFilmBean}", ModifierFilmBean.class);
		ModifierFilmBean b = new ModifierFilmBean();
		
		this.selectedFilm = getFilmParam(facesContext);
		b.setSelectedFilm(selectedFilm);
		ve.setValue(el, b);

		// puis redirection vers ce bean
		return "modifierFilm";
	}
 
	//get value from "f:param"
	public Film getFilmParam(FacesContext fc){
 
		Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
		Film film = null;
		for (Film f : filmsAchetes) {
			if (Integer.valueOf(params.get("idFilm")).compareTo(Integer.valueOf(f.getId())) == 0) {
				film = f;
				break;
			}
		}
		
		return film;
	}
	
	public List<Film> getFilmsAchetes() {
		return filmsAchetes;
	}

	public void setFilmsAchetes(List<Film> filmsAchetes) {
		this.filmsAchetes = filmsAchetes;
	}

	public Film getSelectedFilm() {
		return selectedFilm;
	}

	public void setSelectedFilm(Film selectedFilm) {
		this.selectedFilm = selectedFilm;
	}

}
